Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit dcfd93cebc63b0ff274d153dbfe187d086a69249


Parents : e6e3a8f
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-03T18:48:20-05:00

feat(build): add checks for miniaudio library compatibility in macOS universal build script

Changes

2 files changed, 40 insertions(+), 0 deletions(-)


Diff

diff --git a/scripts/build-macos-universal.sh b/scripts/build-macos-universal.sh
index 8c9420ba..c4123fee 100644
--- a/scripts/build-macos-universal.sh
+++ b/scripts/build-macos-universal.sh
@@ -31,6 +31,15 @@ else
echo "Reusing prebuilt frontend assets in meshchatx/public/."
fi
cross-env ARCH=arm64 pnpm run build-backend
+_arm_miniaudio="build/exe/darwin-arm64/lib/_miniaudio.abi3.so"
+if [[ -f "$_arm_miniaudio" ]]; then
+ _ft=$(file --brief --no-pad "$_arm_miniaudio" 2>/dev/null || true)
+ if [[ "$_ft" == *x86_64* && "$_ft" != *arm64* ]]; then
+ echo "darwin-arm64 cx_Freeze output has x86_64-only _miniaudio.abi3.so; universal lipo will fail." >&2
+ echo "Rebuild miniaudio in the Poetry env (see scripts/ci/github-install-deps.sh) or fix compiler flags." >&2
+ exit 1
+ fi
+fi
if [[ -n "${PYTHON_CMD_X64:-}" ]]; then
cross-env ARCH=x64 PYTHON_CMD="$PYTHON_CMD_X64" pnpm run build-backend
else

diff --git a/scripts/ci/github-install-deps.sh b/scripts/ci/github-install-deps.sh
index 09b78a12..6c3424a5 100755
--- a/scripts/ci/github-install-deps.sh
+++ b/scripts/ci/github-install-deps.sh
@@ -32,5 +32,36 @@ python -m poetry check --lock
python -m poetry install --no-interaction --no-ansi
python -m poetry run python scripts/patch_lxst_pyogg_ogg_ctypes.py
+# Python 3.14 may install miniaudio from sdist; a mis-linked x86_64-only
+# _miniaudio.abi3.so in the arm64 cx_Freeze tree differs from the x64 slice and
+# breaks @electron/universal (lipo cannot merge two x86_64-only Mach-O files).
+if [[ "$(uname -s)" == "Darwin" && "$(uname -m)" == "arm64" ]]; then
+ if ! poetry run python -c "
+import importlib.util
+import pathlib
+import subprocess
+import sys
+
+spec = importlib.util.find_spec('miniaudio')
+if not spec or not spec.origin:
+ sys.exit(0)
+so = pathlib.Path(spec.origin).resolve().parent / '_miniaudio.abi3.so'
+if not so.is_file():
+ sys.exit(0)
+out = subprocess.check_output(['file', str(so)], text=True)
+if 'x86_64' in out and 'arm64' not in out:
+ sys.exit(1)
+sys.exit(0)
+"; then
+ echo "Rebuilding miniaudio for arm64 (was x86_64-only)." >&2
+ (
+ export ARCHFLAGS="-arch arm64"
+ export CFLAGS="-arch arm64 ${CFLAGS:-}"
+ export CXXFLAGS="-arch arm64 ${CXXFLAGS:-}"
+ poetry run python -m pip install --force-reinstall --no-cache-dir --no-binary miniaudio "miniaudio>=1.70,<2"
+ )
+ fi
+fi
+
pnpm config set verify-store-integrity true
pnpm install --frozen-lockfile


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────